/**在src文件下新建utils文件夹
 * 在utils文件下新建reques.js 
 * 在reques.js里面进行封装网络请求
 * ***/

//  先引入axios和qs
import axios from 'axios'
import qs from 'query-string'
// import { config } from 'vue/types/umd';

// 错误信息的响应方法，errorHandle会在响应拦截里面调用
const errorHandle = (status, other) => {
    // 判断 如果status的状态值，你传过来，这个
    switch (status) {
        case 400:
            // 请求头和服务器的限制
            console.log("服务器不理解请求的 语法");
            break;
        case 401:
              // token验证失败，用户身份验证失败
              console.log("未授权，请求要求身份验证");
            break;
        case 403:
              // 身份过期用户，服务器请求限制，比如你10分钟只允许请求4次。四次之后不让你再请求
              console.log("禁止，服务器拒绝请求");
            break;
        case 404:
              // 网络请求地址资源
              console.log("未找到，服务器找不到请求的网页");
            break; 
      default:
          console.log(other);

    }

}
// 创建axios对象
const instance = axios.create({
    timeout: 5000 //请求超时
})

// 全局配置
// instance.defaults.baseURL = "http://iwenwiki.com";
// 这个暂时用不上headers
// axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// 创建请求拦截和响应拦截操作 这个再官网有，但是自己写一个简易的
// 官网https://www.kancloud.cn/yunye/axios/234845  搜索拦截器
// 创建请求拦截 使用es6的箭头函数
instance.interceptors.request.use(config => {
    // 配置
    if (config.method === 'post') {
        config.data = qs.stringify(config.data);
    }
    return config;
},
    error => Promise.reject(error)
)

// 响应拦截
instance.interceptors.response.use(
    // 成功
    /*
    成功与失败的判断
    1.请求成功和请求失败
    2.请求成功：结果的成功和结果的失败
    */
    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
    error => {
        const { response } = error;//Es6的解构赋值
        /**
         * response包含的信息有
         * status 状态码200
         * data  信息
         */
        if (response) {
            //   给出开发者的具体的错误信息
            errorHandle(response.status, response.data)
            // 抛出错误信息 400-404
            return Promise.reject(response)
        }else{
            // 断网或者请求中断
            console.log("断网或者请求中断");
        }
    }
)
export default instance;